<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>异常  &middot; sitename</title>
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">


<meta name="description" content="异常 description" />

<meta name="keywords" content="one, two, ">


<meta property="og:title" content="异常  &middot; sitename ">
<meta property="og:site_name" content="sitename"/>
<meta property="og:url" content="https://lvzongcheng.gitee.io/java/%E5%BC%82%E5%B8%B8/" />
<meta property="og:locale" content="en-EN">


<meta property="og:type" content="article" />
<meta property="og:description" content="异常 description"/>
<meta property="og:article:published_time" content="2017-05-13T00:00:00Z" />
<meta property="og:article:modified_time" content="2017-05-13T00:00:00Z" />

  
    
<meta property="og:article:tag" content="one">
    
<meta property="og:article:tag" content="two">
    
  

  

<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Article",
    "headline": "异常",
    "author": {
      "@type": "Person",
      "name": "LvZongCheng"
    },
    "datePublished": "2017-05-13",
    "description": "异常 description",
    "wordCount":  104 
  }
</script>



<link rel="canonical" href="https://lvzongcheng.gitee.io/java/%E5%BC%82%E5%B8%B8/" />

<link rel="apple-touch-icon-precomposed" sizes="144x144" href="https://lvzongcheng.gitee.io/touch-icon-144-precomposed.png">
<link href="https://lvzongcheng.gitee.io/favicon.png" rel="icon">

<meta name="generator" content="Hugo 0.60.0" />

  <!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->

<link href='https://fonts.googleapis.com/css?family=Merriweather:300%7CRaleway%7COpen+Sans' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="/css/font-awesome.min.css">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/highlight/default.css">

  
  
	<script>
	  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
	  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
	  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
	  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

	  ga('create', 'Your Google Analytics tracking code', 'auto');
	  ga('send', 'pageview');

	</script>

</head>
<body>
  <main id="main-wrapper" class="container main_wrapper has-sidebar">
    <header id="main-header" class="container main_header">
  <div class="container brand">
  <div class="container title h1-like">
  <a class="baselink" href="https://lvzongcheng.gitee.io">
  LvZongCheng

</a>

</div>

  
<div class="container topline">
  
  淡定 执著 进取 自律


</div>


</div>

  <nav class="container nav primary no-print">
  

<a class="homelink" href="https://lvzongcheng.gitee.io">home</a>


  
<a href="https://lvzongcheng.gitee.io/framework" title="Show list of Frameworks">Frameworks</a>

<a href="https://lvzongcheng.gitee.io/java" title="Show list of Java">Java</a>

<a href="https://lvzongcheng.gitee.io/linux" title="Show list of Linux">Linux</a>

<a href="https://lvzongcheng.gitee.io/redis" title="Show list of Redis">Redis</a>

<a href="https://lvzongcheng.gitee.io/sql" title="Show list of SQL">SQL</a>

<a href="https://lvzongcheng.gitee.io/Spring" title="Show list of Spring">Spring</a>

<a href="https://lvzongcheng.gitee.io/tools" title="Show list of Tools">Tools</a>

<a href="https://lvzongcheng.gitee.io/webpage" title="Show list of WebPage">WebPage</a>

<a href="https://lvzongcheng.gitee.io/information" title="Show list of information">information</a>

<a href="https://lvzongcheng.gitee.io/network" title="Show list of network">network</a>

<a href="https://lvzongcheng.gitee.io/%E5%BE%AE%E6%9C%8D%E5%8A%A1" title="Show list of 微服务">微服务</a>

<a href="https://lvzongcheng.gitee.io/%E6%80%BB%E7%BB%93" title="Show list of 总结">总结</a>

<a href="https://lvzongcheng.gitee.io/%E6%9C%BA%E5%99%A8%E8%87%AA%E5%8A%A8%E5%8C%96" title="Show list of 机器自动化">机器自动化</a>

<a href="https://lvzongcheng.gitee.io/%E6%B1%87%E7%BC%96" title="Show list of 汇编">汇编</a>

<a href="https://lvzongcheng.gitee.io/%E8%AE%B0%E4%BA%8B%E6%9C%AC" title="Show list of 记事本">记事本</a>


</nav>

<div class="container nav secondary no-print">
  
<a id="contact-link-email" class="contact_link" rel="me" aria-label="Email" href="mailto:Lyc19880405@163.com">
  <span class="fa fa-envelope-square"></span></a>



<a id="contact-link-github" class="contact_link" rel="me" aria-label="Github" href="https://github.com/enten/hugo-boilerplate">
  <span class="fa fa-github-square"></span></a>




 


















</div>


  

</header>


<article id="main-content" class="container main_content single">
  <header class="container hat">
  <h1>异常
</h1>

</header>

  <div class="container content">
  <h5 id="checkedruntime">异常分为两大类，Checked异常和Runtime异常（运行时异常）</h5>
<pre><code>所有RuntimeException类即其子类都称为Runtime异常，不是RuntimeException类即子类  
的都是Checked异常。  
</code></pre>
<p>在finally块中使用了return和throw语句，将会导致try块、catch块中的return、throw语句失效。
因为程序执行try、catch块时遇到了return或throw语句都会导致方法结束。但是系统执行这两个
语句并不会结束该方法，而是去寻找流程中是否有finally块如果没有就执行return或throw语句，
方法终止。如果有finally块，系统就执行finally语句，如果finally块里也使用了return或throw
等导致方法终止的语句，finally块已经终止了方法，系统将不会回去执行try块、catch块里的任
何方法。</p>
<p>异常类</p>
<p><img src="/image/Java/20170621-01.jpg" alt="Alt text"></p>
<ol>
<li>
<p>Throwable（可抛出）：异常类的最终父类，它有两个子类，Error与Exception。
Throwable中常用方法有：
getCause()：返回抛出异常的原因。如果 cause 不存在或未知，则返回 null。
getMeage()：返回异常的消息信息。
printStackTrace()：对象的堆栈跟踪输出至错误输出流，作为字段 System.err 的值。</p>
</li>
<li>
<p>Error（错误）：表示程序无法处理的错误，一般与程序员的执行操作无关。理论上这些错误是不允许发生的，如果发生，也不应该试图通过程序去处理，所以Error不是try-catch的处理对象，而JVM一般的处理方式是终止发生错误的线程。Error类常见子类有VirtualMachineError与AWTError。</p>
</li>
<li>
<p>VirtualMachineError（虚拟机错误）：表示虚拟机出现错误。
在Java运行时内存中，除程序计数器外的虚拟机栈、堆、方法区在请求的内存无法被满足时都会抛出OutOfMemoryError；
而如果线程请求的栈深度超出虚拟机允许的深度时，就会抛出StackOverFlowError。</p>
</li>
<li>
<p>AWTError（AWT组件出错）：这个错误并不是很常用。但是提一下AWT与Swing的区别，AWT是使用操作系统中的图形函数的抽象窗口工具，用C\C++编写，为了实现Java“一次编译，处处运行”的理念，AWT使用各个操作系统图形函数的交集，所以功能较差，但运行速度较快，适合嵌入式Java；
而Swing组件是基于AWT编写的图形界面系统，它用纯Java编写，所以必然实现了“一次编译，处处运行”，但相较于AWT运行速度较慢，适合PC使用。</p>
</li>
<li>
<p>Exception（异常）：出现原因取决于程序，所以程序也理应通过try-catch处理。
异常分为两类：可查异常与不可查异常。</p>
</li>
</ol>
<p>可查异常：编译器要求必须处理，否则不能通过编译，使用try-catch捕获或者throws抛出。常见的可查异常有IOException（IO错误）及其子类EOFExcption(文件已结束异常)、FileNotFound（文件未找到异常）。</p>
<p>不可查异常（也叫运行时异常）：编译期不会检查，所以在程序中可不处理，但如果发生，会在运行时抛出。所以这类异常要尽量避免！常见的不可查异常都是RuntimeException类及其子类。</p>
<h6 id="runtimeexception-">RuntimeException 异常</h6>
<ol>
<li>NullPointerException：空指针异常。调用了不存在的对象或未经实例化或初始化的对象时会抛出，如当试图操作一个空对象（赋值为null）的属性、方法时就会抛出。</li>
</ol>
<p>（实例化：通俗的理解就是为对象开辟空间，使其可在规定范围内被调用。注意：User u;这只是一个对象声明，并没有进行实例化或初始化。
初始化：就是把实例化后的对象中的基本数据类型字段赋默认值或设定值，为非基本类型赋值null，对于static字段只会初始化一次。）</p>
<ol start="2">
<li>
<p>ArithmeticException：算术条件异常。最常见的就是0作除数时会抛出。</p>
</li>
<li>
<p>ClassNotFoundException：类未找到异常。在通过反射Class.forName(“类名”)来获取类时，如果未找到则会抛出异常。</p>
</li>
<li>
<p>ArrayIndexOutOfBoundsException：数组索引越界异常。当试图操作数组的索引值为负数或大于等于数组大小时会抛出。</p>
</li>
<li>
<p>NegativeArraySizeException：数组长度为负值异常。一般在初始化数组大小为负值时抛出。</p>
</li>
<li>
<p>ArrayStoreException：数组类型不匹配值异常。例如将一个Object数组中加入一个Integer对象与一个String对象时，类型不匹配就会抛出。</p>
</li>
<li>
<p>IllegalArgumentException：非法参数异常。会在使用Java类库方法时传入参数值越界时抛出。</p>
</li>
</ol>
<p>throw new 异常类<br>
通过throw手动抛出一个自定义异常对象</p>
<h6 id="catch">catch可以捕获多种异常类应注意：</h6>
<ol>
<li>捕获多种异常时用|分开
<ul>
<li>例：&hellip;.catch(IndexOutofBoundsException|NumberFormatException){}&hellip;.</li>
</ul>
</li>
<li>捕获多种异常时，异常变量有隐式的final修饰，因此异常变量不能重新赋值。</li>
</ol>
<p>//try必须，catch和finally至少出现其中之一<br>
try<br>
{<br>
需要检测的代码.<br>
}<br>
catch(异常类 变量)//捕获异常<br>
{<br>
处理异常的代码（处理方式）<br>
或者用 “throw new 异常对象；”抛出异常，就是显示给用户，让用户知道。<br>
throw new IOException(&ldquo;输入错误&rdquo;);<br>
}<br>
finally<br>
{<br>
一定会执行的代码<br>
}</p>
<h6 id="throws-throw">throws 和throw的区别</h6>
<ol>
<li>throws使用在方法上。throw使用在方法内。</li>
<li>throws后面跟的异常类，可以跟多个，用逗号隔开。throw后跟的是自定义异常对象，每次只能抛出一个异常对象。
例： 
public class 类名()
{
public void 方法名() throws 异常类
{
}
}
例：throw new 异常方法；</li>
</ol>
<p>异常在子父类覆盖中的体现：</p>
<ol>
<li>子类在覆盖父类时，如果父类的方法抛出异常，那么子类的覆盖方法，只能抛出父类的异常或者该异常的子类。</li>
<li>如果父类方法抛出多个异常，那么子类在覆盖该方法时，只能抛出父类异常的子集。</li>
<li>如果父类或者接口的方法中没有异常抛出，那么子类在覆盖方法时，也不可以抛出异常。如果子类方法发生了异
常。就必须要进行try处理。绝对不能抛。</li>
</ol>
<p>自定义异常继承Exception的原因：
异常类和异常对象都被抛出，他们都具有可抛性，在这个可抛性是Throwable这个体系中的独有特点。
只有这个体系中的类和对象才可以被throw和throws抛出。</p>
<ol>
<li>如果throw抛出的异常是Checked异常，则throw语句要么处于try块里，要么放在带throws声明抛出的方法中。</li>
<li>如果throw抛出的异常是Runtime异常，则该语句不用放在try块里或throws声明抛出的方法中。将该方法交给
该方法的调用者处理。</li>
</ol>
<p>在开发时不要使用过于庞大的try块，因为会造成业务过于复杂，导致分析异常原因的难度增加。
所以把大块的try块分割成多个可能出现异常的程序段，并把他们放在单独的try块中，从而分别捕获并处理异常。</p>

</div>


  
</article>
      <footer id="main-footer" class="container main_footer">
  

  <div class="container nav foot no-print">
  
<a href="https://lvzongcheng.gitee.io/license">license</a>


  <a class="toplink" href="#">back to top</a>

</div>

  <div class="container credits">
  
<div class="container footline">
  
  code with <!-- raw HTML omitted --><!-- raw HTML omitted -->


</div>


  
<div class="container copyright">
  
  (c) 2015 yourname.


</div>


</div>

</footer>

    </main>
    
<script type="text/javascript">
  (function() {
    
    
    if (window.location.hostname == "localhost")
      return;
    var dsq = document.createElement('script'); dsq.async = true; dsq.type = 'text/javascript';
    dsq.src = '//your_disqus_shortname.disqus.com/count.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
  })();
</script>



<script src="/js/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>



    
  </body>
</html>

